perm filename INSUB.F4[NEW,LCS] blob
sn#592306 filedate 1981-06-06 generic text, type T, neo UTF8
00002 C*** ACSHFT(RX)
00005 C***** ROFF,NOZERO,RHORZ
00010 C*** RLOOP, BMX
00020
00030 SUBROUTINE RLOOP(A,B,N)
00040 DIMENSION A(1),B(1)
00050 DO 1 K=1,N
00060 1 A(K)=B(K)
00070 END
00080
00100 SUBROUTINE BMX(RA)
00200 C RA=NUMB. OF TAILS
00300 C VQ HOLDS TEMPORARY INFO RE. MULTIPLE BEAMS.
00400 COMMON E,F,G,H,RJQ(34),RB,VQX,JB,B,JV,JW /XRN/RN(1)
00500 1 /RINP/R(10,85),VQ(100) /STF/RSTFAC(0/7),RSTJ2
00600 1 /SCM/V(78),I,LCNT,STAFF,LIST(200),REND /RNW/RNW
00700 1/LIMIT/LIMIT,ITEM,LL,IS,IX /SC/J,L,MK
00800 1 ,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,IXX,ISEMI,IQT
00900 1 ,VX(50),IAMP,K,KN,M,MODE,IBLA
01000 1 /SCX/JALPHA(30),JX,U,JZ,IRHY,JD,KA,KB,IZ
01100 M=IS-12
01200 RX7=RN(7+M)
01300 C ORIGINAL STEM DIR. AND NUM. OF BEAMS INFO.
01400 DO 1 L=KN,K
01500 B=R(7,L)
01600 JB=B/10
01700 B=B-JB*10
01800 C??? B=AMOD(R(7,L),10.0)
01900 IF(R(8,L).EQ.1000.)B=0
02000 C AVOIDS GRACE NOTES AND NON-NOTES
02100 IF(R(1,L).NE.1)B=0
02200 1 VQ(L)=B
02300 VQ(K+1)=0
02400 C CLEARS IT FOR ROUTINE AT '3'
02500 JB=KN
02600 RX8=0
02700 JBX=0
02800 C THE ABOVE 2 ARE FOR NEW COMPOSITE BEAM FEATURE 5/78
02900
03000 6 DIS=0
03100 RB9=0
03200 DO 2 L=JB,K
03300 IF(VQ(L).LE.RA)GO TO 2
03400 C SKIP IF EQ. TO PRESENT BEAM
03500 RB=VQ(L)
03600 LL=L
03700 4 DO 11 JD=LL,K
03800 VQX = VQ(JD)
03900 IF(VQX.GE.RB)GO TO 20
04000 IF(VQX.EQ.0)GO TO 11
04100 C VQX=0 ON NON-STEM NOTES OF CHORDS. (HENCE NO TAILS)
04200 21 B=10.
04300 IF(LL.GT.KN)GO TO 13
04400 GO TO 16
04500 20 JV=JD
04600 IF(VQX.GT.RB)GO TO 21
04700 11 JW=JD
04800 B=20
04900 C FINDS NEED FOR BEAM TO LEFT
05000 16 B=B+RA
05100 IF(JBX)GO TO 50
05200 C FOR NEW COMPOSITE BEAM FEATURE 5/78
05300 JE=RN(7+M)/10.
05400 RN(7+M)=JE*10.+RA
05500 GO TO 51
05600 50 DO 5 JE=1,6
05700 5 RN(JE+IS)=RN(JE+M)
05800 RN(7+IS)=RX7+RB-RA*2.
05900 C ADDS RIGHT NUM. OF BEAMS
06000 51 IF(LL.NE.JV)GO TO 10
06100 IF(LL.EQ.KN)GO TO 377
06200 IF(LL.NE.K)GO TO 10
06300 377 B=-B
06400 C PARTIAL, UNATTACHED BEAM IS PLACED AUTOMATICALLY IN ITMSUB.
06500 GO TO 8
06600 13 IF(JV.GT.LL)GO TO 14
06700 IF(R(7,LL+1).LT.10)GO TO 15
06800 C NEXT FOR DOT ON FOLLOWING NOTE.
06900 DIS=10.
07000 GO TO 19
07100 15 DIS=20.
07200 C SHORT INNER BEAM TO LEFT OF STEM
07300 19 B=-RA
07400 GO TO 16
07500 14 DIS=30
07600 C LONG INNER BEAM
07700 JV=-JV
07800 GO TO 16
07900
08000 C PARTIAL BEAM IS ON RIGHT(+) OR LEFT(-). RBM IS LENGTH.
08100 10 IF(LL.EQ.KN)GO TO 22
08200 IF(JV.GE.0)GO TO 17
08300 B=R(3,LL)
08400 JV=-JV
08500 LL=JV
08600 22 IF(VQ(JW+1).GT.VQ(JW))GO TO 17
08700 VQ(JW)=VQ(JW+1)
08800 JW=JW-1
08900 17 IF(LL.NE.JB)GO TO 18
09000 IF(B.LT.20.)LL=JV
09100 C PUTS BEAMS IN RIGHT PLACE.
09200 18 RC=R(10,LL)
09300 IF(RC.EQ.0)GO TO 23
09400 RB=RNW*RSTJ2
09500 IF(ABS(R(4,LL)).GE.100)RB=RB*.6
09600 C GET WIDTH OF NOTE(RNW) FOR DISPLACEMENT
09700 IF(RC.EQ.2)RB=-RB
09800 RC=RB
09900 23 RB9=RC+R(3,LL)
10000 C THIS WILL BE POS.3
10100 DIS=RA+DIS
10200 C DISPLACES
10300 GO TO 8
10400 2 CONTINUE
10500 RETURN
10600 8 JB=JW+1
10700 C FINDS SIDE (L,R) FOR PARTIAL BEAM
10800 C FOR NEW DISPLACEMENT
10900 RN(IS+11)=-1
11000 IF(RB9+DIS.EQ.0)GO TO 31
11100 IF(DIS.LT.10)GO TO 32
11200 IF(DIS.LT.30)GO TO 33
11300 C INNER PARTIAL BEAM IS NEXT
11400 DIS=DIS-30
11500 GO TO 31
11600 32 IF(B.GE.20)GO TO 12
11700 DIS=B-10
11800 B=-1
11900 C -1 PICKS UP POS OF P3
12000 GO TO 31
12100 12 DIS=B-20
12200 B=RB9
12300 RB9=-1
12400 C -1 IN P9 WILL PICK UP POS OF P6
12500 C INNER BEAM ATTACHED TO LFT SIDE.
12600 GO TO 31
12700 33 B=-DIS
12800 DIS=0
12900 31 L=IS
13000 IF(JBX)GO TO 53
13100 L=M
13200 DIS=(RB-RA)*100.+1.
13300 53 IF(RX8.GT.1.)GO TO 52
13400 IF(RB9.NE.0)GO TO 52
13500 IF(RX8.NE.0)GO TO 54
13600 RX8=B
13700 GO TO 52
13800 54 RN(8+M)=-30
13900 C TWO UNATTACHED BEAMS, LEFT AND RIGHT
14000 RX8=1
14100 GO TO 55
14200 52 RN(8+L)=B
14300 RN(9+L)=RB9
14400 RN(10+L)=DIS
14500 IF(JBX)CALL UPDATE(9)
14600 C ADDED ANOTHER ITEM (PART. BEAM)
14700 JBX=-1
14800 JA=0
14900 55 IF(JB.LE.K)GO TO 6
15000 END
15100
15200 SUBROUTINE ACSHFT(RX)
15300 COMMON /XRN/RN(1) /STF/RSTFAC(0/7),RSTJ2
15400 1 /SCM/V(78),I,LCNT,STAFF,LIST(200),REND
15500 1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA
15600 1,DBST,NFLG,IXX,ISEMI,IQT,F(50),IAMP,K,KN,M,MODE,IBLA
15700 1 /RINP/R(10,85),VQ(100)
15800 EQUIVALENCE (A,F(1)),(B,F(2)),(X,F(4)),
15900 1(Y,F(5)),(Z,F(6)),(JD,F(7)),(RN1,F(8)),(RH,F(9))
16000 Z=0
16100 L=K-1
16200 M=L-ABS(RX)
16300 JD=1
16400 RN1=99
16500 Y=-.23
16600 IF(RX.LT.0)GO TO 1
16700 L=M
16800 M=K-1
16900 JD=-1
17000 1 DO 2 N=M,L,JD
17100 C DOES IT HAVE AN ACCID?
17200 IF(AMOD(R(5,N),10.).EQ.0)GO TO 2
17300 A=0
17400 B=0
17500 IF(N.LT.L)A=R(6,N+1)
17600 IF(N.GT.M)B=R(6,N-1)
17700 IF(RN1.NE.99)GO TO 3
17800 C IS THIS THE FIRST ACCID?
17900 RN1=R(4,N)
18000 GO TO 6
18100 3 RH=R(4,N)
18200 IF(ABS(RH-RN1).LT.5)GO TO 4
18300 RN1=RH
18400 IF(Y.GT.0)Z=Z+.04
18500 C STOPS OCT., ETC. ACCIS BEING MOVED TO LEFT.
18600 Y=-.23+Z
18700 6 IF(A.EQ.20)GO TO 477
18800 IF(B.NE.20)GO TO 4
18900 477 Y=Z
19000 4 X=0
19100 IF(R(6,N).EQ.20)X=-.24
19200 IF(R(6,N).EQ.10)X=.24
19300 Y=Y+.23
19400 IF(X+Y.LT.1)GO TO 7
19500 RN1=RH
19600 Z=Z+.04
19700 Y=0
19800 IF(A.EQ.20)GO TO 677
19900 IF(B.NE.20)GO TO 577
20000 677 Y=.23
20100 C SO Y DOESN'T GET >1.
20200 577 Y=Y+Z
20300 7 X=X+Y
20400 IF(ABS(X-.04).LT..01)X=0
20500 IF(X.GE.0)GO TO 5
20600 Y=.23+Z
20700 X=Z
20800 5 R(5,N)=R(5,N)+X*RSTFAC(IFIX(STAFF))
20900 C SPACING OF ACCI. DEPENDS ON STAFF SIZE FACTOR AT THIS POINT
21000 2 CONTINUE
21100 END
21200
21300 C SETUP ALLOWS SETING UP RHYTHMS ON DESIGNATED STAFF FOR SPACING ALL OTHERS.
21400 SUBROUTINE SETUP
21500 INTEGER PWDS
21600 COMMON /SCM/V(78),IV,LCNT,STAFF,LIST(200),REND
21700 1 /PTR/PWDS(1) /LIMIT/LIMIT,ITEM,L,I,IX
21800 1 /DPY/ST(4000),MEDIT,GO /XRN/RN(1)
21900 1 /RMOD/RMODE2,SET4,IBEAM,NOSET,STEM,STUP,NTC,
22000 1 ENDP,RA,RDD,ITB,POSB
22100 DIMENSION RPOS(2,100)
22200 EQUIVALENCE (RPOS,ST(3400))
22300
22400 C RHYTHMIC VALUES ARE SAVED IN P9 OF NOTES AND P7 OF RESTS.
22500 STUP=-1
22600 C THIS SENDS INFO TO SUBR. NOTES
22700 IF(SET4.GT.7)RETURN
22800 C **** BE SURE SETUP STAFF HAS SPACE VALUES IN NOTES AND RESTS!!!
22900 IF(ITEM.EQ.0)RETURN
23000 JX=0
23100 RA=0
23200 DO 9534 K=1,ITEM
23300 L=PWDS(K)
23400 IF(RN(L+2).NE.SET4)GO TO 9534
23500 RD=RN(L+1)
23600 IF(RD.LT.5)GO TO 5
23700 IF(RD.LT.17)GO TO 9534
23800 5 IF(RD.GT.2)GO TO 6
23900 RC=7
24000 IF(RD.EQ.2)RC=5
24100 IF(RN(L).LT.RC)GO TO 9534
24200 M=9
24300 IF(RD.EQ.2)M=7
24400 RC=RN(L+M)
24500 IF(RC.EQ.0)GO TO 9534
24600 C FOR OTHER NOTES ON SPACING STAFF.
24700 IF(RC.EQ.4./88.)GO TO 9534
24800 C THESE FOR GRACE NOTES (1/88 NOTES)
24900 GO TO 7
25000 C SKIPS 'OTHER' CHORD TONES (I.E. P9=0 IN A NOTE)
25100 6 IF(RD.NE.3)GO TO 8
25200 IF(RN(L).LT.3)GO TO 7
25300 RC=RN(L+5)
25400 IF(RC.GE.100)GO TO 7
25500 IF(RC.GT.3)GO TO 9534
25600 C SKIPS IF NOT A REAL CLEF (+100=MINI CLEF)
25700 GO TO 7
25800 8 IF(RD.NE.4)GO TO 10
25900 IF(RN(L).GT.2)GO TO 9534
26000 C SKIPS IF NOT BARLINE (I.E. ONLY 4 PARAMS)
26100 10 IF(RD.NE.2)GO TO 7
26200 IF(RN(L).LT.5)GO TO 9534
26300 IF(RN(L+7).EQ.0)GO TO 9534
26400 7 JX=JX+1
26500 RPOS(1,JX)=RN(L+3)
26600 IF(RD.GT.2)GO TO 3
26700 C JUMP WHEN TIME VALUES ARE IN P8
26800 C FOR VALUES AUTOMATICALLY SET. ALLOWS NON-DUPLE UNITS IN SETUP
26900 277 RA=RA+RC
27000 C SUM OF RHYTHS
27100 GO TO 77
27200 3 RC=-RD
27300 77 RPOS(2,JX)=RC
27400 C RC IS RHYTHMIC VALUE OF NOTE.
27500 9534 CONTINUE
27600 C NEXT PUTS ITEMS IN PROPER ORDER IF THEY WEREN'T ALREADY
27700 C*** 2ND NOTE OF DBL STOP CAN'T!! HAVE RHYTH. VALUE *******
27800 IF(RA.EQ.0)RETURN
27900 C RA=0 MEANS DIDN'T FIND RHYTHMS ON SPACING STAFF.
28000
28100 CALL SORT2(RPOS,JX)
28200 ENDP=200.
28300 IF(RPOS(2,JX))ENDP=RPOS(1,JX)
28400 DO 1 L=1,JX
28500 1 IF(RPOS(2,L).GT.0)GO TO 4
28600 4 RD=RPOS(1,L)
28700 RB=ENDP-RD
28800 C TOTAL SPACE FROM 1ST NOTE TO END OF LINE
28900 RC=RPOS(2,L)
29000 RPOS(2,L)=RD
29100 C REAL AND AVERAGED POSITIONS OF 1ST NOTE ARE THE SAME.
29200 DO 2 K=L+1,JX
29300 RE=RPOS(2,K)
29400 IF(RE)GO TO 2
29500 RD=RC/RA*RB+RD
29600 RC=RE
29700 RPOS(2,K)=RD
29800 2 CONTINUE
29900 C 1,K=REAL POS. 2,K=AVERAGED POS.
30000 C IN RHYTH: POS=(P1-AVG2)*(RL2-RL1)/(AVG2-AVG1)+RL1
30100 JX=JX+1
30200 RPOS(1,JX)=ENDP
30300 RPOS(2,JX)=ENDP
30400 STUP=0
30500 C THIS FOR NOTES AND RHYTH
30600 END
30700
30800 SUBROUTINE TYPE
30900 COMMON/ALF/INP(72),ML /IDEV/IDEV /MKX/KSLA,ISEMI,LESS,IGT
31000 IF(IDEV.NE.5)GO TO 2
31100 1 CALL TYPSTR('TYPE --')
31200 CALL TYPCRL
31300 2 READ(IDEV,2114,END=167)INP
31400 IF(INP(1).EQ.LESS)GO TO 167
31500 IF(INP(1).NE.IGT)RETURN
31600 IDEV=1
31700 GO TO 2
31800 167 IDEV=5
31900 GO TO 1
32000 2114 FORMAT(72A1)
32100 C FOR 'SCORE' INPUT
32200 END
32300
32400 SUBROUTINE SLRLEV(RA,RB,NN,C,P6)
32500 C RA=LEFT LEVEL OF SLUR, RB=RIGHT LEVEL, NN=NEG='DIP' UP
32600 COMMON /STF/RSTFAC(8),RSTJ2
32700 X=RA-RB
32800 IF(X.EQ.0)RETURN
32900 C=-7.
33000 C C=NEG MAKES P8 INTO A -1.
33100 IF(NN.GE.0)GO TO 1
33200 IF(X.GT.0)GO TO 2
33300 RA=RA+7
33400 IF(X.GT.-7.)RA=RB
33500 RETURN
33600 2 RB=RB+7
33700 IF(X.LT.7)RB=RA
33800 RETURN
33900 1 IF(X.LT.0)GO TO 3
34000 RA=RA-7
34100 IF(X.LT.7)RA=RB
34200 GO TO 4
34300 3 RB=RB-7
34400 IF(X.GT.-7.)RB=RA
34500 4 P6=P6-2.3*RSTJ2
34600 C WHEN DIP IS DOWN, SHIFT RIGHT SIDE OF SLUR TO LEFT TO AVOID HITTING STEM.
34700 END
34800
34900 FUNCTION OUTLIM(I,J)
35000 COMMON R2,JA,CENTR,J2,R3,R4,R5 /XRN/RN(1)
35100 OUTLIM=-1
35200 R=RN(I+J)
35300 IF(R.LT.R4)RETURN
35400 IF(R.GT.R5)RETURN
35500 OUTLIM=0
35600 END
35700 FUNCTION NOTAIL(X)
35800 NOTAIL=0
35900 Z=ABS(X)
36000 IF(Z.LT..56.OR.Z.EQ..75)RETURN
36100 IF(Z.EQ..875.OR.Z.EQ..6)RETURN
36200 NOTAIL=-1
36300 END
36400
36500 FUNCTION POSIT(V)
36600 COMMON/RINP/R(10,85),POSNT(0/99)
36700 IF(V)V=-V
36800 C REREAD OR SOMETHING MAKES /1 C- 2/ GIVE A -2 FOR LAST NUM.!!!???
36900 K=V
37000 A=POSNT(K)
37100 POSIT=A+(POSNT(K+1)-A)*AMOD(V,1.0)
37200 C TYPE /2.3 -- FOR POSITION BETWEEN NTS 2 AND 3. ETC.
37300 END
37400
37500 SUBROUTINE SLEND
37600 INTEGER PWDS
37700 COMMON/XRN/RN(1) /SCM/V(78),I,LCNT,STAFF,LIST(200),REND
37800 1 /PTR/PWDS(1) /LIMIT/LIMIT,ITEM /RMOD/RMODE2,RSET4,IBEAM,
37900 1 NOSET,STEM,STUP,NTC,ENDP,RAD,RDD,ITB,POSB
38000 DO 1 K=1,ITEM
38100 L=PWDS(K)
38200 C SLN1: MOVE 6,PTR(5) ;L=PWDS(K)
38300 IF(RN(L+1).NE.8)GO TO 1
38400 C FOUND A STAFF
38500 IF(RN(L+2).NE.STAFF)GO TO 1
38600 IF(ITB.LT.0)GO TO 2
38700 POSB=202
38800 IF(RN(L).LT.4)RETURN
38900 POSB=RN(L+6)+2
39000 IF(POSB.EQ.2)POSB=202
39100 RETURN
39200 2 POSB=RN(L+3)-2.3
39300 RETURN
39400 1 CONTINUE
39500 END
39510
40010
40020 FUNCTION ROFF(R)
40030 C FOR ROUND OFF
40040 S=.5
40050 IF(R.LT.0)S=-S
40060 ROFF=R+S
40070 END
40080
40090 SUBROUTINE NOZERO(X)
40100 IF(X.EQ.0)X=1.
40110 END
40120
40130 SUBROUTINE EXCH(X,Y)
40140 Z=X
40150 X=Y
40160 Y=Z
40170 END
40180
40190 FUNCTION RHORZ(R)
40200 RHORZ=R*5.96-596.
40210 END
40220 C ADJUST BH AND FL FOR HEIGHT OF NOTE AND 'WIDTH'
40230
40240 FUNCTION RTLINE(L)
40250 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/XRN/RN(1)
40260 C CHECKS TO SEEIF R2 HAS STAFF NUM DESIRED. (IF >7, ALL STAVES OK)
40270 IF(R2.GT.7)GO TO 1
40280 IF(RN(L+2).NE.R2)GO TO 2
40290 1 RTLINE=0
40300 C RIGHT STAFF
40310 RETURN
40320 2 RTLINE=-1
40330 C WRONG STAFF
40340 END